home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- from __future__ import generators
- from rdflib.syntax.serializers import Serializer
- from rdflib.URIRef import URIRef
- from rdflib.Literal import Literal
- from rdflib.BNode import BNode
- from rdflib.util import uniq
- from rdflib.exceptions import Error
- from rdflib.syntax.xml_names import split_uri
- from xml.sax.saxutils import quoteattr, escape
-
- class XMLSerializer(Serializer):
-
- def __init__(self, store):
- super(XMLSerializer, self).__init__(store)
-
-
- def __bindings(self):
- store = self.store
- nm = store.namespace_manager
- bindings = { }
- for predicate in uniq(store.predicates()):
- (prefix, namespace, name) = nm.compute_qname(predicate)
- bindings[prefix] = URIRef(namespace)
-
- RDFNS = URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#')
- if 'rdf' in bindings:
- if not bindings['rdf'] == RDFNS:
- raise AssertionError
- else:
- bindings['rdf'] = RDFNS
- for prefix, namespace in bindings.iteritems():
- yield (prefix, namespace)
-
-
-
- def serialize(self, stream, base = None, encoding = None, **args):
- self.base = base
- self._XMLSerializer__stream = stream
- self._XMLSerializer__serialized = { }
- encoding = self.encoding
- write('<?xml version="1.0" encoding="%s"?>\n' % self.encoding)
- write('<rdf:RDF\n')
- bindings = list(self._XMLSerializer__bindings())
- bindings.sort()
- for prefix, namespace in bindings:
- if prefix:
- write(' xmlns:%s="%s"\n' % (prefix, namespace))
- continue
- self.write = write = (lambda uni: stream.write(uni.encode(encoding, 'replace')))
- write(' xmlns="%s"\n' % namespace)
-
- write('>\n')
- for subject in self.store.subjects():
- self.subject(subject, 1)
-
- write('</rdf:RDF>\n')
- del self._XMLSerializer__serialized
-
-
- def subject(self, subject, depth = 1):
- if subject not in self._XMLSerializer__serialized:
- self._XMLSerializer__serialized[subject] = 1
- if isinstance(subject, (BNode, URIRef)):
- write = self.write
- indent = ' ' * depth
- element_name = 'rdf:Description'
- if isinstance(subject, BNode):
- write('%s<%s rdf:nodeID="%s"' % (indent, element_name, subject))
- else:
- uri = quoteattr(self.relativize(subject))
- write('%s<%s rdf:about=%s' % (indent, element_name, uri))
- if (subject, None, None) in self.store:
- write('>\n')
- for predicate, object in self.store.predicate_objects(subject):
- self.predicate(predicate, object, depth + 1)
-
- write('%s</%s>\n' % (indent, element_name))
- else:
- write('/>\n')
-
-
-
-
- def predicate(self, predicate, object, depth = 1):
- write = self.write
- indent = ' ' * depth
- qname = self.store.namespace_manager.qname(predicate)
- if isinstance(object, Literal):
- attributes = ''
- if object.language:
- attributes += ' xml:lang="%s"' % object.language
-
- if object.datatype:
- attributes += ' rdf:datatype="%s"' % object.datatype
-
- write('%s<%s%s>%s</%s>\n' % (indent, qname, attributes, escape(object), qname))
- elif isinstance(object, BNode):
- write('%s<%s rdf:nodeID="%s"/>\n' % (indent, qname, object))
- else:
- write('%s<%s rdf:resource=%s/>\n' % (indent, qname, quoteattr(self.relativize(object))))
-
-
-